{
*l2tab = l2e_from_page(page,
L1_PROT|_PAGE_DIRTY|_PAGE_PSE);
+ if ( opt_allow_superpage )
+ get_superpage(page_to_mfn(page), d);
va += 1UL << L2_PAGETABLE_SHIFT;
continue;
}
int opt_allow_superpage;
boolean_param("allowsuperpage", opt_allow_superpage);
+#ifdef __i386__
static int get_superpage(unsigned long mfn, struct domain *d);
+#endif
static void put_superpage(unsigned long mfn);
#define l1_disallow_mask(d) \
}
-static int get_superpage(unsigned long mfn, struct domain *d)
+int get_superpage(unsigned long mfn, struct domain *d)
{
struct spage_info *spage;
unsigned long x, nx, y;
unsigned long x, nx, y;
unsigned long do_pages = 0;
- ASSERT(opt_allow_superpage);
+ if ( !opt_allow_superpage )
+ {
+ put_spage_pages(mfn_to_page(mfn));
+ return;
+ }
spage = mfn_to_spage(mfn);
y = spage->type_info;
#define frame_table ((struct page_info *)FRAMETABLE_VIRT_START)
#ifdef __x86_64__
#define spage_table ((struct spage_info *)SPAGETABLE_VIRT_START)
+int get_superpage(unsigned long mfn, struct domain *d);
#endif
extern unsigned long max_page;
extern unsigned long total_pages;